package com.pets.springboot_petshop.util;

/**
 * @Author: wxk
 * @Email: 2089967794@qq.com
 * @Date: 2024/11/25 下午9:32 周一
 * @Description: 订单编号
 */
import java.math.BigInteger;
import java.util.Random;
import java.util.concurrent.atomic.AtomicInteger;

public class OrderNumberUtil {

    // 用于生成随机数的原子类，确保线程安全
    private static final AtomicInteger counter = new AtomicInteger(0);
    private static final Random random = new Random();

    /**
     * 生成订单编号
     * @return 订单编号
     */
    public static synchronized String generateOrderNumber() {
        long timestamp = System.currentTimeMillis() * 1000; // timestamp = System.currentTimeMillis() * 1000; 将毫秒级时间戳乘以1000，转换为微秒级时间戳。
        System.out.println(timestamp);
//        long timestamp2 = System.currentTimeMillis(); // 当前时间戳（毫秒）
//        System.out.println("毫秒级时间戳: " + timestamp2);
//        long microTimestamp = timestamp * 1000; // 当前时间戳（微秒）
//        System.out.println("微秒级时间戳: " + microTimestamp);
        int randomPart = generateRandomPart(); // 6位随机数
        System.out.println(randomPart);
        return timestamp + String.format("%06d", randomPart); // 拼接成订单编号
    }

    /**
     * 生成6位随机数
     * @return 随机数
     */
    private static int generateRandomPart() {
        int randomNum;
        int counterValue = counter.getAndIncrement();
        if (counterValue >= 999999) { // 如果计数器达到最大值，则重置
            counter.set(0);
        }
        randomNum = random.nextInt(999999) + counterValue; // 生成随机数并加上计数器值
        return randomNum;
    }
}